<?php
class HttpRequest
{
//Thuộc tính
    private $domainName;
    private $redirectLink;
    private $arrayLink;
    private $valueLink;
    private $isLink;
    private $ip;
    private $userAgent;
    private $sub;

    public function __construct()
    {
        global $_SERVER;
        //Tên miền chạy
        $this->domainName = $_SERVER['HTTP_HOST'];
        //Giá trị địa chỉ
        if (isset($_GET['query'])) {
            $this->valueLink = $_GET['query'];
        } else {
            $this->valueLink = '';
        }
        //Tính hợp lệ
        $this->isLink = true;
        if (strpos($_SERVER['REQUEST_URI'], 'IndexController.php') !== FALSE) {
            $this->isLink = false;
            $this->redirectLink = 'http://' . $this->domainName;
        }
        if (substr($this->valueLink, strlen($this->valueLink) - 1, 1) == '/') {
            $this->isLink = false;
            $this->redirectLink = 'http://' . $this->domainName;
        }
        if (strpos($this->domainName, 'www.') !== FALSE) {
            $this->isLink = false;
            $this->domainName = str_replace('www.', '', $this->domainName);
            $this->redirectLink = 'http://' . $this->domainName . '/' . $this->valueLink;
        }
        //Địa chỉ IP
        $this->ip = $_SERVER['REMOTE_ADDR'];
        //Thông tin trình duyệt
        $this->userAgent = $_SERVER['HTTP_USER_AGENT'];
        //Mảng liên kết
        $this->arrayLink = explode('/', $this->valueLink);
    }

    /*
      * Phương thức kiểm tra tính hợp lệ liên kết
      */

    public function checkLink()
    {
        return $this->isLink;
    }

    /*
      * Phương thức lấy thông tin liên kết
      */

    public function getLink($pos)
    {
        return $this->arrayLink[$pos];
    }

    /*
    * Phương thức lấy tên miền
    */

    public function getDomainName()
    {
        return $this->domainName;
    }

    /*
      * Phương thức lấy liên kết điều hướng
      */

    public function getRedirectLink()
    {
        return $this->redirectLink;
    }

    /*
      * Phương thức lấy địa chỉ IP Client
      */

    public function getIP()
    {
        return $this->ip;
    }

    /*
      * Phương thức lấy thông tin trình duyệt
      */

    public function getUserAgent()
    {
        return $this->userAgent;
    }

    /*
      * Phương thức chuyển hướng
      */

    public function redirect($link)
    {
        header('HTTP/1.1 301 Moved Permanently');
        header('Location: ' . $link);
    }

    /*
    * get doaminLocal
    */
    public function getSubDomain()
    {
        $domain = $this->domainName . '/';
        if ($this->sub != null)
            $domain .= $this->sub . "/";
        return $domain;
    }

    public function getUrl()
    {
        $sub = str_replace('IndexController.php', '', $_SERVER['SCRIPT_NAME']);
        $sub = str_replace('backend.php', '', $sub);
        $base_url = 'http://' . $_SERVER['HTTP_HOST'] . $sub;
        return $base_url;

    }


    public function setSub($sub)
    {
        $this->sub = $sub;
    }

    public function getSub()
    {
        return $this->sub;
    }

    /*
     * get url hiện tại
     */
    public function selfURL()
    {
        $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
        $protocol = $this->strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/") . $s;
        $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":" . $_SERVER["SERVER_PORT"]);

        return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI'];
    }

    public function getUri()
    {
        return $_SERVER['REQUEST_URI'];
    }

    private function strleft($s1, $s2)
    {
        return substr($s1, 0, strpos($s1, $s2));
    }

    public function checkPost()
    {
        $isCheck = false;
        if ($_SERVER['REQUEST_METHOD'] == 'POST')
            $isCheck = true;
        return $isCheck;
    }

    public function getFile($objecFile)
    {
        return $_FILES[$objecFile];
    }

    public function getRequestString($param)
    {
        $data = null;
        if (isset($_REQUEST[$param]) && $_REQUEST[$param] != "") {
            $data = $_REQUEST[$param];
        }
        return $data;
    }

    public function getRequestBool($param)
    {
        $data = false;
        if (isset($_REQUEST[$param]) && $_REQUEST[$param] != "") {
            $data = $_REQUEST[$param];
        }
        return $data;
    }

    public function getRequestNumber($param)
    {
        $data = -1;
        if (isset($_REQUEST[$param]) && $_REQUEST[$param] != "") {
            $data = $_REQUEST[$param];
        }
        return $data;
    }

    public function getPostString($param)
    {
        $data = null;
        if (isset($_POST[$param]) && $_POST[$param] != "") {
            $data = $_POST[$param];
        }
        return $data;
    }

    public function getPostBool($param)
    {
        $data = false;
        if (isset($_POST[$param]) && $_POST[$param] == 1) {
            $data = true;
        }
        return $data;
    }

    public function getPostNumber($param)
    {
        $data = -1;
        if (isset($_POST[$param]) && $_POST[$param] != "") {
            $data = $_POST[$param];
        }
        return $data;
    }

    public function getGetString($param)
    {
        $data = null;
        if (isset($_GET[$param]) && $_GET[$param] != "") {
            $data = $_GET[$param];
        }
        return $data;
    }

    public function getGetBool($param)
    {
        $data = false;
        if (isset($_GET[$param]) && $_GET[$param] != "") {
            $data = $_GET[$param];
        }
        return $data;
    }

    public function getGetNumber($param)
    {
        $data = -1;
        if (isset($_GET[$param]) && $_GET[$param] != "") {
            $data = $_GET[$param];
        }
        return $data;
    }

    public function getQueryString()
    {
        $queryString = explode('?', $_SERVER['REQUEST_URI']);
        return '?' . $queryString[1];
    }

    public function getCookie($key)
    {
        return $_COOKIE[$key];
    }

    public function getQueryStringParam($key = null)
    {
        $param = null;
        $query = $this->getQueryString();
        $query = explode("?", $query);
        $query = $query[1];
        if ($query != null) {
            $query = explode("&", $query);
            foreach ($query as $v) {
                $data = explode("=", $v);
                $index = $data[0];
                $param[$index] = $data[1];
            }
        }
        return $param[$key];
    }

}
